Masao Kurata
Z List
42
|
Posted - 2014.02.06 00:17:00 -
[1] - Quote
Independent of whether this should have been "fixed" (the mechanic was very bug like but it certainly created content), the fix CCP chose actually had very undesirable side effects, namely preventing people from getting aggression timers and limited engagements because of aggressive drones when their ships are attacked. The stupid and lazy are now favoured more than they were before Rubicon, there are no longer sec status loss free pod kills against most players and docking, jumping, refitting etc. are all allowed in situations where they would previously have been automatically prevented by a weapons timer caused by drone retaliation against an attack. Whether drones should retaliate if you attack a deployable or not (probably not), they certainly should retaliate against an attack on your ship regardless of whether this will initiate a limited engagement.
Some vital information before I continue: drone retaliation against deployable structure attacks only occurred when the drones are already fighting a target and that target disappears. Mostly this means a rat but suiciding a rookie ship to give them a target worked too.
An incident gave me a clue as to the nature of the underlying bug. I was scouting for someone shooting mission runners' MTUs when the mechanic was new and poorly understood and a raven didn't engage. Pretty standard. The interesting thing was about ten minutes later the raven died to rats and he got the killmail despite having never attacked the ship itself. So an attack on a deployable is considered an attack on a player at some level and qualified him to receive the killmail even though it was a pve loss.
If I were to guess, EVE's code might have logic something like this (please excuse horrible pseudocode mixing Python, C++ and English with curly brackets because I can't work out how to retain indentation):
# Called when an aggressive module is activated Ship::on_aggress(object): { # Is player owned, not an NPC ship or structure if object.owner != None: object.owner.killers.append(self)
# Is a ship and is not vacant if object.pilot != None: { for drone in object.drones: { if drone.target == None: drone.select_target() } } }
Drone::lost_target(): { self.select_target() }
Drone::select_target(): { self.target = sorted(self.owner.killers, by distance)[0] }
CCP "fixed" this issue by adding an additional check to select_target() in this pseudocode to not initialise an LE, but the correct fix is to change "if object.owner != None" at the top of Ship::on_aggress to "if object.pilot != None". |